package org.kl.auditsupervision.utils;

import java.util.Random;

/**
 * @Author hqm
 * @CreateTime 2015年9月20日 上午1:14:33
 */
public class RandomUtils {
	/**
	 * <pre>
	 * 随机指定范围内N个不重复的数 
	 * 在初始化的无重复待选数组中随机产生一个数放入结果中， 
	 * 将待选数组被随机到的数，用待选数组(len-1)下标对应的数替换 
	 * 然后从len-2里随机产生下一个随机数，如此类推 
	 * @param max  指定范围最大值 
	 * @param min  指定范围最小值 
	 * @param n  随机数个数
	 * @return int[] 随机数结果集
	 */
	public static int[] randomArray(int min, int max, int n) {
		int len = max - min + 1;

		if (max < min || n > len) {
			return null;
		}

		// 初始化给定范围的待选数组
		int[] source = new int[len];
		for (int i = min; i < min + len; i++) {
			source[i - min] = i;
		}

		int[] result = new int[n];
		Random rd = new Random();
		int index = 0;
		for (int i = 0; i < result.length; i++) {
			// 待选数组0到(len-2)随机一个下标
			index = Math.abs(rd.nextInt() % len--);
			// 将随机到的数放入结果集
			result[i] = source[index];
			// 将待选数组中被随机到的数，用待选数组(len-1)下标对应的数替换
			source[index] = source[len];
		}
		return result;
	}

	public static void main(String[] args) {
		Random rd = new Random();
		for (int i = 0; i < 10; i++) {
			System.out.print(rd.nextInt(10) + "  ");
		}
		System.out.println("------------------");
		int[] reult2 = randomArray(0, 2, 3);
		for (int i : reult2) {
			System.out.print(i + "  ");
		}

	}
}
